home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BBS in a Box 7
/
BBS in a Box - Macintosh - Volume VII (BBS in a Box) (January 1993).iso
/
Files
/
Prog
/
T
/
TC Prog Guide.cpt
/
picture ƒ
/
segment.c
< prev
next >
Wrap
Text File
|
1991-02-16
|
3KB
|
118 lines
/*
* FILE: segment.c
* AUTHOR: R. Gonzalez
* CREATED: October 2, 1990
*
* defines methods for abstract segment classes, from which
* all graphics figures descend
*/
# include "segment.h"
/******************************************************************
* generic set-color. derived classes should override!
******************************************************************/
void Segment::set_color(color segment_color)
{
}
/******************************************************************
* generic draw. derived classes should override!
******************************************************************/
void Segment::draw(Camera* camera,Projector* projector,
Transformation* trans)
{
}
/******************************************************************
* generic move. derived classes should override!
******************************************************************/
void Segment::move(Transformation* trans)
{
}
/******************************************************************
* initialize abstract nested segment. Derived class should
* override this and first call inherited method before init-
* ializing segments and num_segments appropriately. Make sure
* num_segments <= MAX_SEGMENTS. If you don't call the inherited
* method be sure to allocate transformation in the derived method.
******************************************************************/
boolean Nested_Segment::init(void)
{
transformation = new(Transformation);
transformation->init();
num_segments = 0;
return TRUE;
}
/******************************************************************
* Set nested segment color. No need to override.
******************************************************************/
void Nested_Segment::set_color(color segment_color)
{
int i;
for (i=0 ; i<num_segments ; i++)
segment[i]->set_color(segment_color);
}
/******************************************************************
* Nested segment draw method. No need to override.
******************************************************************/
void Nested_Segment::draw(Camera* camera,Projector* projector,
Transformation* received_trans)
{
int i;
Transformation *sent_trans;
sent_trans = new(Transformation);
sent_trans->init();
sent_trans->combine(transformation,received_trans);
for (i=0 ; i<num_segments ; i++)
segment[i]->draw(camera,projector,sent_trans);
sent_trans->destroy();
delete(sent_trans);
}
/******************************************************************
* Nested segments move by altering their transformation.
* No need to override.
******************************************************************/
void Nested_Segment::move(Transformation* trans)
{
Transformation *temp;
temp = new(Transformation);
temp->init();
temp->equate(transformation);
transformation->combine(temp,trans);
temp->destroy();
delete(temp);
}
/******************************************************************
* destroy. No need to override.
******************************************************************/
boolean Nested_Segment::destroy(void)
{
int i;
transformation->destroy();
delete(transformation);
for (i=0 ; i<num_segments ; i++)
{
segment[i]->destroy();
delete(segment[i]);
}
return TRUE;
}